home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #5 / Amiga Plus CD - 2000 - No. 5.iso / Tools / Dev / fpc / amigaunits / layers.pas < prev    next >
Pascal/Delphi Source File  |  2000-01-01  |  13KB  |  534 lines

  1. {
  2.     This file is part of the Free Pascal run time library.
  3.  
  4.     A file in Amiga system run time library.
  5.     Copyright (c) 1998-2000 by Nils Sjoholm
  6.     member of the Amiga RTL development team.
  7.  
  8.     See the file COPYING.FPC, included in this distribution,
  9.     for details about the copyright.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14.  
  15.  **********************************************************************}
  16.  
  17. UNIT layers;
  18.  
  19. INTERFACE
  20. USES exec, graphics, utility;
  21.  
  22. const
  23.  
  24.     LAYERSIMPLE         = 1;
  25.     LAYERSMART          = 2;
  26.     LAYERSUPER          = 4;
  27.     LAYERUPDATING       = $10;
  28.     LAYERBACKDROP       = $40;
  29.     LAYERREFRESH        = $80;
  30.     LAYER_CLIPRECTS_LOST = $100;        { during BeginUpdate }
  31.                                         { or during layerop }
  32.                                         { this happens if out of memory }
  33.     LMN_REGION          = -1;
  34.  
  35. type
  36.  pLayer_Info = ^tLayer_Info;
  37.  tLayer_Info = record
  38.     top_layer           : pLayer;
  39.     check_lp            : pLayer;              { !! Private !! }
  40.     obs                 : pClipRect;
  41.     FreeClipRects       : pClipRect;              { !! Private !! }
  42.     PrivateReserve1,                            { !! Private !! }
  43.     PrivateReserve2     : Longint;              { !! Private !! }
  44.     Lock                : tSignalSemaphore;      { !! Private !! }
  45.     gs_Head             : tMinList;              { !! Private !! }
  46.     PrivateReserve3     : Integer;                 { !! Private !! }
  47.     PrivateReserve4     : Pointer;              { !! Private !! }
  48.     Flags               : WORD;
  49.     fatten_count        : Shortint;                 { !! Private !! }
  50.     LockLayersCount     : Shortint;                 { !! Private !! }
  51.     PrivateReserve5     : Integer;                 { !! Private !! }
  52.     BlankHook,                                  { !! Private !! }
  53.     LayerInfo_extra     : Pointer;              { !! Private !! }
  54.  end;
  55.  
  56. const
  57.     NEWLAYERINFO_CALLED = 1;
  58.  
  59. {
  60.  * LAYERS_NOBACKFILL is the value needed to get no backfill hook
  61.  * LAYERS_BACKFILL is the value needed to get the default backfill hook
  62.  }
  63.  LAYERS_NOBACKFILL      = 1;
  64.  LAYERS_BACKFILL        = 0;
  65.  
  66.  LAYERSNAME : PChar = 'layers.library';
  67.  
  68. VAR LayersBase : pLibrary;
  69.  
  70. FUNCTION BeginUpdate(l : pLayer) : LONGINT;
  71. FUNCTION BehindLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  72. FUNCTION CreateBehindHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  73. FUNCTION CreateBehindLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  74. FUNCTION CreateUpfrontHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  75. FUNCTION CreateUpfrontLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  76. FUNCTION DeleteLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  77. PROCEDURE DisposeLayerInfo(li : pLayer_Info);
  78. PROCEDURE DoHookClipRects(hook : pHook; rport : pRastPort; rect : pRectangle);
  79. PROCEDURE EndUpdate(layer : pLayer; flag : ULONG);
  80. FUNCTION FattenLayerInfo(li : pLayer_Info) : LONGINT;
  81. PROCEDURE InitLayers(li : pLayer_Info);
  82. FUNCTION InstallClipRegion(layer : pLayer; region : pRegion) : pRegion;
  83. FUNCTION InstallLayerHook(layer : pLayer; hook : pHook) : pHook;
  84. FUNCTION InstallLayerInfoHook(li : pLayer_Info; hook : pHook) : pHook;
  85. PROCEDURE LockLayer(dummy : LONGINT; layer : pLayer);
  86. PROCEDURE LockLayerInfo(li : pLayer_Info);
  87. PROCEDURE LockLayers(li : pLayer_Info);
  88. FUNCTION MoveLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  89. FUNCTION MoveLayerInFrontOf(layer_to_move : pLayer; other_layer : pLayer) : LONGINT;
  90. FUNCTION MoveSizeLayer(layer : pLayer; dx : LONGINT; dy : LONGINT; dw : LONGINT; dh : LONGINT) : LONGINT;
  91. FUNCTION NewLayerInfo : pLayer_Info;
  92. PROCEDURE ScrollLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT);
  93. FUNCTION SizeLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  94. PROCEDURE SortLayerCR(layer : pLayer; dx : LONGINT; dy : LONGINT);
  95. PROCEDURE SwapBitsRastPortClipRect(rp : pRastPort; cr : pClipRect);
  96. PROCEDURE ThinLayerInfo(li : pLayer_Info);
  97. PROCEDURE UnlockLayer(layer : pLayer);
  98. PROCEDURE UnlockLayerInfo(li : pLayer_Info);
  99. PROCEDURE UnlockLayers(li : pLayer_Info);
  100. FUNCTION UpfrontLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  101. FUNCTION WhichLayer(li : pLayer_Info; x : LONGINT; y : LONGINT) : pLayer;
  102.  
  103. IMPLEMENTATION
  104.  
  105. FUNCTION BeginUpdate(l : pLayer) : LONGINT;
  106. BEGIN
  107.   ASM
  108.     MOVE.L  A6,-(A7)
  109.     MOVEA.L l,A0
  110.     MOVEA.L LayersBase,A6
  111.     JSR -078(A6)
  112.     MOVEA.L (A7)+,A6
  113.     MOVE.L  D0,@RESULT
  114.   END;
  115. END;
  116.  
  117. FUNCTION BehindLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  118. BEGIN
  119.   ASM
  120.     MOVE.L  A6,-(A7)
  121.     MOVEA.L dummy,A0
  122.     MOVEA.L layer,A1
  123.     MOVEA.L LayersBase,A6
  124.     JSR -054(A6)
  125.     MOVEA.L (A7)+,A6
  126.     MOVE.L  D0,@RESULT
  127.   END;
  128. END;
  129.  
  130. FUNCTION CreateBehindHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  131. BEGIN
  132.   ASM
  133.     MOVE.L  A6,-(A7)
  134.     MOVEA.L li,A0
  135.     MOVEA.L bm,A1
  136.     MOVE.L  x0,D0
  137.     MOVE.L  y0,D1
  138.     MOVE.L  x1,D2
  139.     MOVE.L  y1,D3
  140.     MOVE.L  flags,D4
  141.     MOVEA.L hook,A3
  142.     MOVEA.L bm2,A2
  143.     MOVEA.L LayersBase,A6
  144.     JSR -192(A6)
  145.     MOVEA.L (A7)+,A6
  146.     MOVE.L  D0,@RESULT
  147.   END;
  148. END;
  149.  
  150. FUNCTION CreateBehindLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  151. BEGIN
  152.   ASM
  153.     MOVE.L  A6,-(A7)
  154.     MOVEA.L li,A0
  155.     MOVEA.L bm,A1
  156.     MOVE.L  x0,D0
  157.     MOVE.L  y0,D1
  158.     MOVE.L  x1,D2
  159.     MOVE.L  y1,D3
  160.     MOVE.L  flags,D4
  161.     MOVEA.L bm2,A2
  162.     MOVEA.L LayersBase,A6
  163.     JSR -042(A6)
  164.     MOVEA.L (A7)+,A6
  165.     MOVE.L  D0,@RESULT
  166.   END;
  167. END;
  168.  
  169. FUNCTION CreateUpfrontHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  170. BEGIN
  171.   ASM
  172.     MOVE.L  A6,-(A7)
  173.     MOVEA.L li,A0
  174.     MOVEA.L bm,A1
  175.     MOVE.L  x0,D0
  176.     MOVE.L  y0,D1
  177.     MOVE.L  x1,D2
  178.     MOVE.L  y1,D3
  179.     MOVE.L  flags,D4
  180.     MOVEA.L hook,A3
  181.     MOVEA.L bm2,A2
  182.     MOVEA.L LayersBase,A6
  183.     JSR -186(A6)
  184.     MOVEA.L (A7)+,A6
  185.     MOVE.L  D0,@RESULT
  186.   END;
  187. END;
  188.  
  189. FUNCTION CreateUpfrontLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  190. BEGIN
  191.   ASM
  192.     MOVE.L  A6,-(A7)
  193.     MOVEA.L li,A0
  194.     MOVEA.L bm,A1
  195.     MOVE.L  x0,D0
  196.     MOVE.L  y0,D1
  197.     MOVE.L  x1,D2
  198.     MOVE.L  y1,D3
  199.     MOVE.L  flags,D4
  200.     MOVEA.L bm2,A2
  201.     MOVEA.L LayersBase,A6
  202.     JSR -036(A6)
  203.     MOVEA.L (A7)+,A6
  204.     MOVE.L  D0,@RESULT
  205.   END;
  206. END;
  207.  
  208. FUNCTION DeleteLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  209. BEGIN
  210.   ASM
  211.     MOVE.L  A6,-(A7)
  212.     MOVEA.L dummy,A0
  213.     MOVEA.L layer,A1
  214.     MOVEA.L LayersBase,A6
  215.     JSR -090(A6)
  216.     MOVEA.L (A7)+,A6
  217.     MOVE.L  D0,@RESULT
  218.   END;
  219. END;
  220.  
  221. PROCEDURE DisposeLayerInfo(li : pLayer_Info);
  222. BEGIN
  223.   ASM
  224.     MOVE.L  A6,-(A7)
  225.     MOVEA.L li,A0
  226.     MOVEA.L LayersBase,A6
  227.     JSR -150(A6)
  228.     MOVEA.L (A7)+,A6
  229.   END;
  230. END;
  231.  
  232. PROCEDURE DoHookClipRects(hook : pHook; rport : pRastPort; rect : pRectangle);
  233. BEGIN
  234.   ASM
  235.     MOVE.L  A6,-(A7)
  236.     MOVEA.L hook,A0
  237.     MOVEA.L rport,A1
  238.     MOVEA.L rect,A2
  239.     MOVEA.L LayersBase,A6
  240.     JSR -216(A6)
  241.     MOVEA.L (A7)+,A6
  242.   END;
  243. END;
  244.  
  245. PROCEDURE EndUpdate(layer : pLayer; flag : ULONG);
  246. BEGIN
  247.   ASM
  248.     MOVE.L  A6,-(A7)
  249.     MOVEA.L layer,A0
  250.     MOVE.L  flag,D0
  251.     MOVEA.L LayersBase,A6
  252.     JSR -084(A6)
  253.     MOVEA.L (A7)+,A6
  254.   END;
  255. END;
  256.  
  257. FUNCTION FattenLayerInfo(li : pLayer_Info) : LONGINT;
  258. BEGIN
  259.   ASM
  260.     MOVE.L  A6,-(A7)
  261.     MOVEA.L li,A0
  262.     MOVEA.L LayersBase,A6
  263.     JSR -156(A6)
  264.     MOVEA.L (A7)+,A6
  265.     MOVE.L  D0,@RESULT
  266.   END;
  267. END;
  268.  
  269. PROCEDURE InitLayers(li : pLayer_Info);
  270. BEGIN
  271.   ASM
  272.     MOVE.L  A6,-(A7)
  273.     MOVEA.L li,A0
  274.     MOVEA.L LayersBase,A6
  275.     JSR -030(A6)
  276.     MOVEA.L (A7)+,A6
  277.   END;
  278. END;
  279.  
  280. FUNCTION InstallClipRegion(layer : pLayer; region : pRegion) : pRegion;
  281. BEGIN
  282.   ASM
  283.     MOVE.L  A6,-(A7)
  284.     MOVEA.L layer,A0
  285.     MOVEA.L region,A1
  286.     MOVEA.L LayersBase,A6
  287.     JSR -174(A6)
  288.     MOVEA.L (A7)+,A6
  289.     MOVE.L  D0,@RESULT
  290.   END;
  291. END;
  292.  
  293. FUNCTION InstallLayerHook(layer : pLayer; hook : pHook) : pHook;
  294. BEGIN
  295.   ASM
  296.     MOVE.L  A6,-(A7)
  297.     MOVEA.L layer,A0
  298.     MOVEA.L hook,A1
  299.     MOVEA.L LayersBase,A6
  300.     JSR -198(A6)
  301.     MOVEA.L (A7)+,A6
  302.     MOVE.L  D0,@RESULT
  303.   END;
  304. END;
  305.  
  306. FUNCTION InstallLayerInfoHook(li : pLayer_Info; hook : pHook) : pHook;
  307. BEGIN
  308.   ASM
  309.     MOVE.L  A6,-(A7)
  310.     MOVEA.L li,A0
  311.     MOVEA.L hook,A1
  312.     MOVEA.L LayersBase,A6
  313.     JSR -204(A6)
  314.     MOVEA.L (A7)+,A6
  315.     MOVE.L  D0,@RESULT
  316.   END;
  317. END;
  318.  
  319. PROCEDURE LockLayer(dummy : LONGINT; layer : pLayer);
  320. BEGIN
  321.   ASM
  322.     MOVE.L  A6,-(A7)
  323.     MOVEA.L dummy,A0
  324.     MOVEA.L layer,A1
  325.     MOVEA.L LayersBase,A6
  326.     JSR -096(A6)
  327.     MOVEA.L (A7)+,A6
  328.   END;
  329. END;
  330.  
  331. PROCEDURE LockLayerInfo(li : pLayer_Info);
  332. BEGIN
  333.   ASM
  334.     MOVE.L  A6,-(A7)
  335.     MOVEA.L li,A0
  336.     MOVEA.L LayersBase,A6
  337.     JSR -120(A6)
  338.     MOVEA.L (A7)+,A6
  339.   END;
  340. END;
  341.  
  342. PROCEDURE LockLayers(li : pLayer_Info);
  343. BEGIN
  344.   ASM
  345.     MOVE.L  A6,-(A7)
  346.     MOVEA.L li,A0
  347.     MOVEA.L LayersBase,A6
  348.     JSR -108(A6)
  349.     MOVEA.L (A7)+,A6
  350.   END;
  351. END;
  352.  
  353. FUNCTION MoveLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  354. BEGIN
  355.   ASM
  356.     MOVE.L  A6,-(A7)
  357.     MOVEA.L dummy,A0
  358.     MOVEA.L layer,A1
  359.     MOVE.L  dx,D0
  360.     MOVE.L  dy,D1
  361.     MOVEA.L LayersBase,A6
  362.     JSR -060(A6)
  363.     MOVEA.L (A7)+,A6
  364.     MOVE.L  D0,@RESULT
  365.   END;
  366. END;
  367.  
  368. FUNCTION MoveLayerInFrontOf(layer_to_move : pLayer; other_layer : pLayer) : LONGINT;
  369. BEGIN
  370.   ASM
  371.     MOVE.L  A6,-(A7)
  372.     MOVEA.L layer_to_move,A0
  373.     MOVEA.L other_layer,A1
  374.     MOVEA.L LayersBase,A6
  375.     JSR -168(A6)
  376.     MOVEA.L (A7)+,A6
  377.     MOVE.L  D0,@RESULT
  378.   END;
  379. END;
  380.  
  381. FUNCTION MoveSizeLayer(layer : pLayer; dx : LONGINT; dy : LONGINT; dw : LONGINT; dh : LONGINT) : LONGINT;
  382. BEGIN
  383.   ASM
  384.     MOVE.L  A6,-(A7)
  385.     MOVEA.L layer,A0
  386.     MOVE.L  dx,D0
  387.     MOVE.L  dy,D1
  388.     MOVE.L  dw,D2
  389.     MOVE.L  dh,D3
  390.     MOVEA.L LayersBase,A6
  391.     JSR -180(A6)
  392.     MOVEA.L (A7)+,A6
  393.     MOVE.L  D0,@RESULT
  394.   END;
  395. END;
  396.  
  397. FUNCTION NewLayerInfo : pLayer_Info;
  398. BEGIN
  399.   ASM
  400.     MOVE.L  A6,-(A7)
  401.     MOVEA.L LayersBase,A6
  402.     JSR -144(A6)
  403.     MOVEA.L (A7)+,A6
  404.     MOVE.L  D0,@RESULT
  405.   END;
  406. END;
  407.  
  408. PROCEDURE ScrollLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT);
  409. BEGIN
  410.   ASM
  411.     MOVE.L  A6,-(A7)
  412.     MOVEA.L dummy,A0
  413.     MOVEA.L layer,A1
  414.     MOVE.L  dx,D0
  415.     MOVE.L  dy,D1
  416.     MOVEA.L LayersBase,A6
  417.     JSR -072(A6)
  418.     MOVEA.L (A7)+,A6
  419.   END;
  420. END;
  421.  
  422. FUNCTION SizeLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  423. BEGIN
  424.   ASM
  425.     MOVE.L  A6,-(A7)
  426.     MOVEA.L dummy,A0
  427.     MOVEA.L layer,A1
  428.     MOVE.L  dx,D0
  429.     MOVE.L  dy,D1
  430.     MOVEA.L LayersBase,A6
  431.     JSR -066(A6)
  432.     MOVEA.L (A7)+,A6
  433.     MOVE.L  D0,@RESULT
  434.   END;
  435. END;
  436.  
  437. PROCEDURE SortLayerCR(layer : pLayer; dx : LONGINT; dy : LONGINT);
  438. BEGIN
  439.   ASM
  440.     MOVE.L  A6,-(A7)
  441.     MOVEA.L layer,A0
  442.     MOVE.L  dx,D0
  443.     MOVE.L  dy,D1
  444.     MOVEA.L LayersBase,A6
  445.     JSR -210(A6)
  446.     MOVEA.L (A7)+,A6
  447.   END;
  448. END;
  449.  
  450. PROCEDURE SwapBitsRastPortClipRect(rp : pRastPort; cr : pClipRect);
  451. BEGIN
  452.   ASM
  453.     MOVE.L  A6,-(A7)
  454.     MOVEA.L rp,A0
  455.     MOVEA.L cr,A1
  456.     MOVEA.L LayersBase,A6
  457.     JSR -126(A6)
  458.     MOVEA.L (A7)+,A6
  459.   END;
  460. END;
  461.  
  462. PROCEDURE ThinLayerInfo(li : pLayer_Info);
  463. BEGIN
  464.   ASM
  465.     MOVE.L  A6,-(A7)
  466.     MOVEA.L li,A0
  467.     MOVEA.L LayersBase,A6
  468.     JSR -162(A6)
  469.     MOVEA.L (A7)+,A6
  470.   END;
  471. END;
  472.  
  473. PROCEDURE UnlockLayer(layer : pLayer);
  474. BEGIN
  475.   ASM
  476.     MOVE.L  A6,-(A7)
  477.     MOVEA.L layer,A0
  478.     MOVEA.L LayersBase,A6
  479.     JSR -102(A6)
  480.     MOVEA.L (A7)+,A6
  481.   END;
  482. END;
  483.  
  484. PROCEDURE UnlockLayerInfo(li : pLayer_Info);
  485. BEGIN
  486.   ASM
  487.     MOVE.L  A6,-(A7)
  488.     MOVEA.L li,A0
  489.     MOVEA.L LayersBase,A6
  490.     JSR -138(A6)
  491.     MOVEA.L (A7)+,A6
  492.   END;
  493. END;
  494.  
  495. PROCEDURE UnlockLayers(li : pLayer_Info);
  496. BEGIN
  497.   ASM
  498.     MOVE.L  A6,-(A7)
  499.     MOVEA.L li,A0
  500.     MOVEA.L LayersBase,A6
  501.     JSR -114(A6)
  502.     MOVEA.L (A7)+,A6
  503.   END;
  504. END;
  505.  
  506. FUNCTION UpfrontLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  507. BEGIN
  508.   ASM
  509.     MOVE.L  A6,-(A7)
  510.     MOVEA.L dummy,A0
  511.     MOVEA.L layer,A1
  512.     MOVEA.L LayersBase,A6
  513.     JSR -048(A6)
  514.     MOVEA.L (A7)+,A6
  515.     MOVE.L  D0,@RESULT
  516.   END;
  517. END;
  518.  
  519. FUNCTION WhichLayer(li : pLayer_Info; x : LONGINT; y : LONGINT) : pLayer;
  520. BEGIN
  521.   ASM
  522.     MOVE.L  A6,-(A7)
  523.     MOVEA.L li,A0
  524.     MOVE.L  x,D0
  525.     MOVE.L  y,D1
  526.     MOVEA.L LayersBase,A6
  527.     JSR -132(A6)
  528.     MOVEA.L (A7)+,A6
  529.     MOVE.L  D0,@RESULT
  530.   END;
  531. END;
  532.  
  533. END. (* UNIT LAYERS *)
  534.